今天為什麼講 docker 呢?因為後面資料庫想用 docker 來開
docker 是一個把作業系統隔離出 process 可以獨立運行的環境, 每個獨立執行的叫做 container, 執行的內容由 image 提供
舉例來說:
所以我們可以運行多個 ubuntu container 在我們的電腦上, 同理, 我們也可以運行多個 mysql, postgresql, mongodb, 只要有人提供某個程式 images 檔案, 我們就能透過 docker run 的指令運行, 這樣真的非常方便!
docker 實務上在看東西的時候, 常常會搭判 grep 來使用, 例如 docker ps | grep mysql, 這樣就會列出包含 mysql 字段的 container
docker images # 列出 docker images
docker ps # 列出執行中的 docker container
docker ps -a # 列出全部的 docker
docker search postgres
docker pull postgres
docker run -it -p 5432:5432 --name mypostgres -e POSTGRES_PASSWORD=12345 -e POSTGRES_DB=testdb postgres
# -it 是持續執行
# -p 5432:5432 是把本機的 5432 port bind container 的 5432 port
# --name 是幫 container 命名, 比較好操作 container
# -e 是提供環境變數, 官方的 docker hub 頁面可以看有哪些環境變數可以用
# 最後面的 postgres 就是 postgres image
為了簡化提供簡單的方式
docker exec -it mypostgres bash
# exec 是執行 container 的命令
# mypostgres 的執行環境裡面有 bash 命令可以使用, 所以這行指令讓我們進入了 container 的 bash 裡面, 非常方便
psql -U postgres -W
# 密碼 12345
# 這樣就進入了 postgres 的 shell 裡面了
# \l 是看 databases
docker stop mypostgres
docker container rm mypostgres
# 刪除 container 前需要停止 container
docker image rm postgres
# 刪除 image 須把相關的 container 都移除掉
可以將以下 script 加入 .bashrc, 然後 source ~/.bashrc 一下, 就能用這四個函式了
註解內示範指令用法
# drmc = docker remove container 的意思 (分享名字思路, 可以自己換)
# $ drmc testc (刪除 testc 這個 container)
drmc(){
sudo docker container stop $1
sudo docker container rm $1
}
# $ drmi testi (刪除 testi 這個 image)
drmi(){
sudo docker image rm $1
}
# 這是跑一個我自己包的 go image 命名為 god (go docker)
# $ god
god(){
docker run -it --name god cbot918/ubugo bash
}
# docker shell bash
# $ dshba god
dshba(){
sudo docker start $1 && docker exec -it $1 bash
}
docker commit
優點:
缺點:如果要監控 K8S cluster, 免費版目前還沒測試成功(付費應該滿簡單的)
備註:官方是開 8000 port 出來, 但不知道為什麼我在 ubuntu 上面需要用 9000 port
docker run -d -p 9000:9000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
這樣子, 瀏覽 localhost:9000, 就可以看到主控台的頁面了!